NVM.SidePanel = function () {
    var __core = NOVEM.Core;

    return {
        init: function (selector) {
            selector = __core.getSelector(selector, false);
            if (selector.length < 1) {
                return true;
            }

            var body = __core.getVars.elBody.classList;

            document.addEventListener('click', function (e) {
                if (!e.target.closest('#side-panel') && !e.target.closest('.side-panel-trigger')) {
                    body.remove('side-panel-open');
                }
            }, false);

            document.querySelectorAll('.side-panel-trigger').forEach(function (el) {
                el.onclick = function (e) {
                    e.preventDefault();

                    body.toggle('side-panel-open');
                    if (body.contains('device-touch') && body.contains('side-push-panel')) {
                        body.toggle('ohidden');
                    }
                };
            });
        }
    };
}();
